package com.ft.scan.service;

import com.ft.scan.common.WxResult;
import com.ft.scan.domain.User;

import java.util.List;

/**
 * 用户服务接口
 * <p>
 * 该接口提供了用户相关的操作，包括查询、修改、删除和注册等功能。
 * 所有方法都遵循了专业的命名规范，并提供了清晰的注释说明。
 *
 * @author wujie
 * @since 2024-01-26
 */
public interface IUserService {
    /**
     * 根据用户名和密码查询用户
     *
     * @param username 用户名
     * @param password 密码
     * @return 查询到的用户对象，如果不存在则返回null
     */
    User selectUserByUsernameAndPassword(String username, String password);

    /**
     * 根据微信登录openid查询用户
     *
     * @param openid 微信登录openid
     * @return 查询到的用户对象，如果不存在则返回null
     */
    User selectUserByOpenid(String openid);

    /**
     * 根据用户ID查询用户信息
     *
     * @param userId 用户ID
     * @return 查询到的用户对象，如果不存在则返回null
     */
    User selectUserByUserId(Long userId);



    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return
     */
    List<User> selectUserByUsername(String username);

    /**
     * 根据手机号查询用户
     * @param mobile 手机号
     * @return User 用户对象，如果不存在则返回null
     */
    User selectUserByMobile(String mobile);

    /**
     * 根据条件查询用户列表
     *
     * @param user 查询条件
     * @return 用户列表
     */
    List<User> selectUserList(User user);

    /**
     * 修改用户信息
     *
     * @param user 待修改的用户对象
     * @return 修改结果，影响的行数
     */
    int updateUser(User user);

    /**
     * 根据用户ID批量删除用户
     *
     * @param userIds 需要删除的用户ID数组
     * @return 删除操作影响的行数
     */
    int deleteUserByUserIds(Long[] userIds);

    /**
     * 根据用户ID删除用户信息
     *
     * @param userId 用户ID
     * @return 删除操作影响的行数
     */
    int deleteUserByUserId(Long userId);

    /**
     * 根据用户名和密码注册用户
     *
     * @param username 用户名
     * @param password 密码
     * @return 注册操作影响的行数
     */
    int insertUserByUsernameAndPassword(String username, String password);

    /**
     * 根据微信登录openid注册用户
     *
     * @param openid
     * @param avatarUrl
     * @param nickname
     * @return
     */
    int insertUserByOpenID(String openid, String nickName, String avatarUrl);

    /**
     * 根据 手机号注册用户
     * @param mobile
     * @return
     */
    int insertUserByMobile(String mobile);

    /**
     * 根据微信登录 code 获取用户 openid
     * @param code
     * @return
     */
    WxResult getOpenIdByCode(String code);

    String sendGetRequest(String url);
}
